﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ferreteria.Forms.Informes
{
    public partial class FrmSegdeUnArt : Form
    {
        DisancoEntities context;
        DataTable dtLineasArt;

        public FrmSegdeUnArt()
        {
            InitializeComponent();
            Creargrilla();
        }

        private void Creargrilla()
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

            dtLineasArt = new DataTable();
            dtLineasArt.Columns.Add("Fecha");
            dtLineasArt.Columns.Add("Motivo");
            dtLineasArt.Columns.Add("Cantidad");
            dtLineasArt.Rows.Clear();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            bool seguir = true;
            FrmAgregarArtCompra BuscarArt = new FrmAgregarArtCompra(seguir);
            BuscarArt.ShowDialog();
            dtLineasArt.Rows.Clear();
            TimeSpan unDia = new TimeSpan(1, 0, 0, 0);  
            DateTime FechaVtaDesde = dtimepDesde.Value.Date;
            DateTime FechaVtaHasta = dtimepFeHasta.Value.Date + unDia;
           
             if (BuscarArt.ArticuloSel != null)
            {
            Articulos buscado = context.Articulos.FirstOrDefault(art => art.art_id == BuscarArt.ArticuloSel.art_id);
            lblNombreArt.Text = buscado.art_nombre;
            lblCod.Text = buscado.art_codigo;
            lblStockAct.Text = Convert.ToString(buscado.art_stock);

            var LnVentasQuery = from lnventas in context.LineaVenta
                                where lnventas.Ventas.venta_fecha >= FechaVtaDesde
                                where lnventas.Ventas.venta_fecha <= FechaVtaHasta
                                where lnventas.Ventas.venta_estado == Clases.Estado.Emitida
                                where lnventas.art_id == buscado.art_id
                                select lnventas;

            foreach (var lnventa in LnVentasQuery)
            {
                DataRow fila = dtLineasArt.NewRow();
                fila["Fecha"] = lnventa.Ventas.venta_fecha.Date.ToShortDateString();
                fila["Motivo"] = "Venta";
                fila["Cantidad"] = lnventa.cantidad_venta;
                dtLineasArt.Rows.Add(fila);
            }

            var LnVentasAdQuery = from lnventasad in context.LineaVentaAdicional
                                where lnventasad.VentasAdicionales.va_fecha >= FechaVtaDesde
                                  where lnventasad.VentasAdicionales.va_fecha <= FechaVtaHasta
                                  where lnventasad.VentasAdicionales.va_estado == Clases.Estado.Emitida
                                  where lnventasad.art_id == buscado.art_id
                                select lnventasad;

            foreach (var lnventa in LnVentasAdQuery)
            {
                DataRow fila = dtLineasArt.NewRow();
                fila["Fecha"] = lnventa.VentasAdicionales.va_fecha.Date.ToShortDateString();
                fila["Motivo"] = "Venta Ad.";
                fila["Cantidad"] = lnventa.linva_cant;
                dtLineasArt.Rows.Add(fila);
            }

           
           var ComprasQuery = from lncompras in context.LineaCompra
                                where lncompras.Compras.compra_fecha >= FechaVtaDesde
                                where lncompras.Compras.compra_fecha <= FechaVtaHasta
                                where lncompras.art_id == buscado.art_id
                                select lncompras;

           foreach (var lncompra in ComprasQuery)
            {
                DataRow fila = dtLineasArt.NewRow();
                fila["Fecha"] = lncompra.Compras.compra_fecha.Value.Date.ToShortDateString();
                fila["Motivo"] = "Compra";
                fila["Cantidad"] = lncompra.lin_com_cant;
                dtLineasArt.Rows.Add(fila);
            }

           var MovimQuery = from lncambio in context.CambiosStock
                              where lncambio.cambio_fecha >= FechaVtaDesde
                            where lncambio.cambio_fecha <= FechaVtaHasta
                              where lncambio.art_id == buscado.art_id
                              select lncambio;

           foreach (var lncambio in MovimQuery)
           {
               DataRow fila = dtLineasArt.NewRow();
               fila["Fecha"] = lncambio.cambio_fecha.Date.ToShortDateString();
               fila["Motivo"] = "Movimiento Stock";
               fila["Cantidad"] = lncambio.cambio_stock;
               dtLineasArt.Rows.Add(fila);
           }

           dgvSeguimiento.DataSource = dtLineasArt;
                 
            dgvSeguimiento.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvSeguimiento.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvSeguimiento.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;



            
            }
        }

        private void Imprimir()
        {
            short copias = 1;
           
            printdocseg.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";
            printdocseg.PrinterSettings.Copies = copias;
       
            printdiagSeg.Document = printdocseg;
            DialogResult resultado = printdiagSeg.ShowDialog();
            if (resultado == DialogResult.OK)
            {
             
                printdocseg.PrinterSettings = printdiagSeg.PrinterSettings;
                printprewseg.Document = printdocseg;
                ((Form)printprewseg).WindowState = FormWindowState.Maximized;
                printprewseg.ShowDialog();
            }
        }
        
        private Font printFont = new Font("Calibri", 12);
        private Font printFontTitulo = new Font("Calibri", 16, FontStyle.Bold);
        private Font printFontsubTitulo = new Font("Calibri", 13, FontStyle.Italic);
        int countArticulos = 0;

        private void printdocseg_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            string fecha = DateTime.Now.ToString("dd/MM/yyyy");
            int margenX = 50;
            int margenY = 50;
            int anchoHoja = 800;

            PointF punto = new PointF();
            punto.X = anchoHoja / 2;
            punto.Y = margenY + 30;

            StringFormat formato = new StringFormat();
            formato.Alignment = StringAlignment.Center;

            //e.Graphics.DrawImage(logo.Image, 10, 20);
            e.Graphics.DrawString("Seguimiento de un Producto", printFontTitulo, Brushes.Black, punto, formato);

            e.Graphics.DrawString("Articulo:", printFontTitulo, Brushes.Black, 60, 100, formato);
            string art = lblNombreArt.Text;
            e.Graphics.DrawString(art, printFontTitulo, Brushes.Black, 350, 100, formato);

            e.Graphics.DrawString("Periodo", printFontTitulo, Brushes.Black, 180, 145, formato);
            e.Graphics.DrawString("Desde:", printFontTitulo, Brushes.Black, 340, 145, formato);
            string fechadesde = dtimepDesde.Value.ToString("dd/MM/yyyy");
            string fechahasta = dtimepFeHasta.Value.ToString("dd/MM/yyyy");
            e.Graphics.DrawString(fechadesde, printFont, Brushes.Black, 415, 150, formato);
            e.Graphics.DrawString("Hasta:", printFontTitulo, Brushes.Black, 580, 145, formato);
            e.Graphics.DrawString(fechahasta, printFont, Brushes.Black, 655, 150, formato);

            punto.Y += 80;
            punto.X = anchoHoja / 3;
           
            //Proceso de dibujado de las lineas 

            
            int anchoLinea = 25;
            int posfecha = margenX+ 60;
            int posMotivo = posfecha + 250;
            int posCantidad = posMotivo + 250;
            int posyencabez = 205;
            int posY = posyencabez + 30;

            e.Graphics.DrawLine(Pens.Black, 10, 135, 800, 135);
            e.Graphics.DrawString(fecha, printFont, Brushes.Black, 645, 70);
            e.Graphics.DrawLine(Pens.Black, 10, 180, 800, 180);

            String Cod = "Fecha";
            e.Graphics.DrawString(Cod, printFontsubTitulo, Brushes.Black, posfecha, posyencabez);
            String Art = "Motivo";
            e.Graphics.DrawString(Art, printFontsubTitulo, Brushes.Black, posMotivo, posyencabez);
            String Cant = "Cantidad";
            e.Graphics.DrawString(Cant, printFontsubTitulo, Brushes.Black, posCantidad, posyencabez);
            e.Graphics.DrawLine(Pens.Black, 10, 225, 800, 225);

            int countLineas = 0;
            int maxLineas = 35;
            
            int maxArticulos = dtLineasArt.Rows.Count;

            while (countLineas < maxLineas && countArticulos < maxArticulos)
            {
                DataRow fila = dtLineasArt.Rows[countArticulos];

                e.Graphics.DrawString(fila["Fecha"].ToString(), printFont, Brushes.Black, posfecha, posY);
                e.Graphics.DrawString(fila["Motivo"].ToString(), printFont, Brushes.Black, posMotivo, posY);
                e.Graphics.DrawString(fila["Cantidad"].ToString(), printFont, Brushes.Black, posCantidad + 10, posY);

                countArticulos++;
                countLineas++;
                posY += anchoLinea;
            }

            if (countArticulos == maxArticulos)
                e.HasMorePages = false;
            else
                e.HasMorePages = true;

        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            Imprimir();
            this.Close();
        }
    
    
    
    
    
    
    
    
    
    
    
    
    }
}
